home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/env python
- """
- cubicsuperpath.py
-
- Copyright (C) 2005 Aaron Spike, aaron@ekips.org
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- """
- import simplepath
-
- def CubicSuperPath(simplepath):
- csp = []
- subpath = -1
- subpathstart = []
- last = []
- lastctrl = []
- for s in simplepath:
- cmd, params = s
- if cmd == 'M':
- if last:
- csp[subpath].append([lastctrl[:],last[:],last[:]])
- subpath += 1
- csp.append([])
- subpathstart = params[:]
- last = params[:]
- lastctrl = params[:]
- elif cmd == 'L':
- csp[subpath].append([lastctrl[:],last[:],last[:]])
- last = params[:]
- lastctrl = params[:]
- elif cmd == 'C':
- csp[subpath].append([lastctrl[:],last[:],params[:2]])
- last = params[-2:]
- lastctrl = params[2:4]
- elif cmd == 'Q':
- #TODO: convert to cubic
- csp[subpath].append([lastctrl[:],last[:],last[:]])
- last = params[-2:]
- lastctrl = params[-2:]
- elif cmd == 'A':
- #TODO: convert to cubics
- csp[subpath].append([lastctrl[:],last[:],last[:]])
- last = params[-2:]
- lastctrl = params[-2:]
- elif cmd == 'Z':
- csp[subpath].append([lastctrl[:],last[:],last[:]])
- last = subpathstart[:]
- lastctrl = subpathstart[:]
- #append final superpoint
- csp[subpath].append([lastctrl[:],last[:],last[:]])
- return csp
-
- def unCubicSuperPath(csp):
- a = []
- for subpath in csp:
- if subpath:
- a.append(['M',subpath[0][1][:]])
- for i in range(1,len(subpath)):
- a.append(['C',subpath[i-1][2][:] + subpath[i][0][:] + subpath[i][1][:]])
- return a
-
- def parsePath(d):
- return CubicSuperPath(simplepath.parsePath(d))
-
- def formatPath(p):
- return simplepath.formatPath(unCubicSuperPath(p))
-
-
-
-
-